package com.huluobo.a2107jetpackkotlindemo.livedata

import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel

/**
 *  Created by LC on 2023/11/22.
 *  LiveData总结:
 *  1.LiveData是一个可被观测的对象,一般通过Observer来进行观测,当他发生改变时,会触发onChange的回调
 *  2.map方法是为了转换某一个属性可被观测到,同时可以修改对应LiveData中的对象
 *  3.switchMap方法是为了通过观测一个LiveData对象来找到对应的另一个LiveData对象的方法,比如:现在详情页面试通过activity传递id来请求的
 *  使用switchMap的话,就是观测id,当id发生变化,就可以直接请求到详情的bean类
 *  4.LiveData,ViewModel和Lifecycle是联用的
 */
class StudentViewModel : ViewModel() {
    private var studentLiveData = MutableLiveData<Student>()
    private var studentIdLiveData = MutableLiveData<String>()

    fun setStudentMessage(student: Student) {
        studentLiveData.value = student
    }

    //声明了个参数来替代get方法
//    val _student: LiveData<Int>
//        //修改观测对象,因为一个学生类中id和名字是不会发生改变的,发生改变的只有分数,所以我们只要观测分数即可
//        get() = Transformations.map(studentLiveData) {
//            it.score
//        }

    fun getScore(id: String): LiveData<Int> {
        return StudentRepo().getStudentScore(id)
    }

    //设置学生id
    fun setStudentId(studentId: String) {
        studentIdLiveData.value = studentId
    }

    //通过id拿到分数的方法
    private fun getStudentScore(studentId: String): LiveData<Int> {
        return StudentRepo().getStudentScore(studentId)
    }

//    var newScore: LiveData<Int> = Transformations.switchMap(studentIdLiveData, ::getStudentScore)

}